<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <script>
        
        window.onload = function () {
            
            // 封闭函数,协作开发中如果同事写了10万行代码,其中包含func1的函数
            // 自己不会全部阅读同事的10万行代码去避免自己也定义func1的函数

            // 同事的函数func1
            function func1() {
                console.log(1);
            }
            func1()

            // 自己的函数func1
            function func1() {
                console.log(111111);
            }

            // 执行的时候会发现，同事的func1并不会执行,只会执行两次自己的11111打印
            func1()


            // 封闭函数解决的就是同名函数冲突的情况下,造成某个函数无法执行,保证两个函数都执行
            function func2() {
                console.log(2);
            }
            func2()

            ;(function () {     // 使用;开头或者多个分号开头,小括号包含的类似匿名函数的形式
                function fun2() {
                    console.log(222222);
                }
                
                fun2()
            })()

            !function () {      // 封闭函数2
                function fun2() {
                    console.log(222222);
                }
                
                fun2()
            }()

            ~function () {      // 封闭函数3
                function fun2() {
                    console.log(222222);
                }
                
                fun2()
            }()

        }
    
    </script>
</head>
<body>

</body>
</html>